package Logica;

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;

import Logica.Celdas.Celda;
import Logica.Enemigos.Enemigo;

/**
 * Esta clase almacena todos los objetos que tiene el juego en excepcion de Mario. Se utiliza una
 * cola provista por java para mantener los enemigos.
 * 
 * @author Mariano Rodecker
 * @author Matias Varela
 * 
 */
public class Mapa {
	/* ################## ATRIBUTOS DE INSTANCIA ######################## */
	protected MatrizCelda matriz;
	protected Queue<Enemigo> colaEnemigos;
	
	/* ################## CONSTRUCTOR ######################## */
	/**
	 * Constructor para un mapa el cual esta constituido por una matriz de celdas.
	 * 
	 * @param matriz
	 *            -
	 */
	public Mapa(MatrizCelda matriz,Queue<Enemigo> colaEnemigos) {
		this.matriz = matriz;
		this.colaEnemigos = colaEnemigos; // la implementacion de enemigos no esta definida a esta altura del
								// proyecto

	}

	/* ################## COMANDOS ######################## */
	public void setInteligenciaEnemigos(Inteligencia intel){
		for (Enemigo e : colaEnemigos){
			e.setInteligencia(intel);
		}
	}
	public void quitarEnemigo() {
		colaEnemigos.poll();
	}

	public void setEnemigos(LinkedList<Enemigo> colaEnemigos) {
		this.colaEnemigos = colaEnemigos;
	}
	public void quitarCelda (Celda c){
		matriz.quitarCelda(c);
	}

	/* ################## CONSULTAS ######################## */
	public boolean tieneEnemigos(){
		return colaEnemigos.size()>0;
	}
	/**
	 * Retorna una celda a partir de una fila y columna dada.
	 * 
	 * @param i
	 *            - fila
	 * @param j
	 *            - columna
	 * @return la celda correspondiente a la fila i y columna j.
	 */
	public Celda getCelda(int i, int j) {
		return matriz.getCelda(i, j);
	}

	public Enemigo getEnemigo() {
		return colaEnemigos.peek();
	}

	/**
	 * Retorna la cantidad de columnas que posee el mapa.
	 * 
	 * @return la cantidad de columnas que posee el mapa.
	 */
	public int getCantColumnas() {
		return matriz.getCantColumnas();
	}

	/**
	 * Retorna la cantidad de filas que posee el mapa.
	 * 
	 * @return la cantidad de filas que posee el mapa.
	 */
	public int getCantFilas() {
		return matriz.getCantFilas();

	}

}
